package 力扣面试经典150;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2024-03-06
 * Time:15:56
 */

/**
 * 力扣面试经典150:167. 两数之和 II - 输入有序数组
 * 中等
 * 相关标签
 * 相关企业
 * 给你一个下标从 1 开始的整数数组 numbers ，该数组已按 非递减顺序排列  ，请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ，则 1 <= index1 < index2 <= numbers.length 。
 * 以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。
 * 你可以假设每个输入 只对应唯一的答案 ，而且你 不可以 重复使用相同的元素。
 * 你所设计的解决方案必须只使用常量级的额外空间。
 * 示例 1：
 * 输入：numbers = [2,7,11,15], target = 9
 * 输出：[1,2]
 * 解释：2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
 */
public class twoSum {
    public int[] twoSum(int[] numbers, int target) {
//        超出时间限制
//        int[] output = new int[2];
//        int fast = 1;
//        int slow = 0;
//        while(fast < numbers.length){
//            if(numbers[fast] > target) {
//                slow++;
//                fast = slow + 1;
//            }else if(numbers[fast] + numbers[slow] == target){
//                output[0] = slow;
//                output[1] = fast;
//            }else{
//                fast++;
//                slow++;
//            }
//        }
//        return output;
        int i = 0, j = numbers.length - 1;

        while(i < j) {
            if(numbers[j] + numbers[i] > target) {
                j--;
            } else if(numbers[j] + numbers[i] < target) {
                i++;
            } else {
                break;
            }
        }

        return new int[]{i + 1, j + 1};
    }
}
